"""
目的：通过找到网易有道翻译的api（应用程序接口）url   通过输入中文   拿到对应的英文
https://fanyi.youdao.com/

网易有道翻译的api  ajax请求的数据  没有进行网页刷新
请求方式 post  data
数据类型 json        模块 json  jsonpath


1确认请求 url
2构建请求头
3构建data参数    dict
4携带data和headers发送请求
5清洗数据
"""
# 1确认请求 url
import requests
from jsonpath import jsonpath

# url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
#
# # 构建请求头
# headers = {
#     "X-Requested-With": "XMLHttpRequest",
#     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
#     'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=1593310827.8658907; OUTFOX_SEARCH_USER_ID="-590911363@10.108.162.134"; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcno1GMpANk7db_FX8ay; fanyi-ad-id=305566; fanyi-ad-closed=1; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies=1650287148067',
#     "Referer": "https://fanyi.youdao.com/"
# }
# word = input("你要翻译那个词语:")
# # 3构建data参数    dict
# # 每个同学的浏览器版本不同 所以data参数在不同的位置
# # 构建参数方式  选中变量按引号
# data = {"i": word,
#         "from": "AUTO",
#         "to": "AUTO",
#         "smartresult": "dict",
#         "client": "fanyideskweb",
#         "salt": "16502871480686",
#         "sign": "646e7a2d2956b9cb5de98209ca8a917d",
#         "lts": "1650287148068",
#         "bv": "ac3968199d18b7367b2479d1f4938ac2",
#         "doctype": "json",
#         "version": "2.1",
#         "keyfrom": "fanyi.web",
#         "action": "FY_BY_REALTlME"
#         }
# # 4携带data和headers发送请求
# response = requests.post(url=url, headers=headers, data=data).json()
# print(response)
# # print(response.content.decode())
# data = jsonpath(response, "$..tgt")
# print(data)
# js逆向的思路
# 当data参数其中一条发生变化  没有得到对应的数据 就要去做对照
# 将两次（不同请求的参数 拿来做对照   看哪个参数发生了变化  （去js逆向拉 找为什么会发生变化  找加密位置 ））
"""
明天的 参数
i: 明天                      
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 16502878889896                          
sign: 9f893755db235a7a9f4f91713c9f6102
lts:  1650287888989
bv: ac3968199d18b7367b2479d1f4938ac2
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

你好的参数 
i: 你好                             *
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 16502879388628                           * 
sign: f14f77acbca131585c1bb31cf906f0e7       * 
lts:  1650287938862                             *
bv: ac3968199d18b7367b2479d1f4938ac2

doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

通过分析 得到结论  
在变化的参数有 
salt
sign 
lts    
找些参数是如何生成的  
进入浏览器  

1点击开发者工具右上角三个点  search 全局搜索    sign 
2进入js文件 
    看到vm开头的 不进  看到 jquery开头的 不看       阿里除外
3进入文件以后  点击左下角的{} 格式化js代码   方便查阅
4全局搜索 sign 
5找加密的位置 80%以data参数构建形式为标准     
6给可疑的地方下断点      如何下断点 看视频 
    断点不是每一行都能断    因为不能断的地方是和上面的代码是一行代码   只是被格式化成了多行
7断完点以后发送请求       执行给出 关键字的操作 
8右边的local 本作用域下的参数信息   作用域不同参数信息就不同因为参数进行了一些操作 a=10   a+=10  a=20 
9 r.salt写法等于 访问r对象里面的 salt属性  
            i: n,
            from: C,
            to: S,
            smartresult: "dict",
            client: E,
            salt: r.salt,                *
            sign: r.sign,                *
            lts: r.ts,                   * 
            bv: r.bv,
            doctype: "json",
            version: "2.1",
            keyfrom: "fanyi.web",
            action: e || "FY_BY_DEFAULT" 
可以到控制台打印 local对应的参数  
得出         salt: r.salt,                *
            sign: r.sign,                *
            lts: r.ts,    就是我们要求的 参数 
            
            
r.ts是我们的时间戳     
1970年1月1日到现在的时间节点 毫秒   python可以通过time模块实现 
    
1650289557292
1650289478365
1650289546895.905
1650289528.2149296
"""
wangyi='1650289478365'

import time
# 实现时间戳 lts: r.ts,
ts=int(time.time()*1000)
print(ts)

#r.salt    = r.ts加随机0-9的数
import random
num=random.randint(0,9)
salt=str(ts)+str(num)
print(salt)

# sign: r.sign,
import hashlib
e=input("请输入你要翻译的内容:")

miwen="fanyideskweb" + e + salt + "Ygy_4c=r#e#4EX^NUGUc5"
sign=hashlib.md5(miwen.encode()).hexdigest()
print(sign)
url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
# 构建请求头
headers = {
    "X-Requested-With": "XMLHttpRequest",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
    'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=1593310827.8658907; OUTFOX_SEARCH_USER_ID="-590911363@10.108.162.134"; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcno1GMpANk7db_FX8ay; fanyi-ad-id=305566; fanyi-ad-closed=1; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies=1650287148067',
    "Referer": "https://fanyi.youdao.com/"
}
# 3构建data参数    dict
# 每个同学的浏览器版本不同 所以data参数在不同的位置
# 构建参数方式  选中变量按引
data = {"i": e,
        "from": "AUTO",
        "to": "AUTO",
        "smartresult": "dict",
        "client": "fanyideskweb",
        "salt": salt,
        "sign": sign,
        "lts":  ts,
        "bv": "ac3968199d18b7367b2479d1f4938ac2",
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "action": "FY_BY_REALTlME"
        }
# 4携带data和headers发送请求
response = requests.post(url=url, headers=headers, data=data).json()
print(response)
# print(response.content.decode())
data = jsonpath(response, "$..tgt")
print(data)